package edu.ec.java02.group02.service;

import edu.ec.java02.group02.domain.*;
import edu.ec.java02.group02.util.Page;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface ManagerService {
    /**
     * 管理员登录
     * @param managerInfo
     * @return true-成功 false-失败
     */
    boolean login(ManagerInfo managerInfo);
;
    /**
     * 查询用户列表
     * @return
     */
    List<UserInfo> getUserList();

    /**
     * 通过page类查询用户信息
     * @param page
     * @return
     */
    List<UserInfo> selectUserListPage(Page page);

    /**
     * 通过page类查询用户信息总数（含查询总数）
     * @param page
     * @return
     */
    Integer selectUserPageCount(Page page);

    /**
     * 通过Id查询用户信息
     * @param userId
     * @return
     */
    UserInfo getUserById(int userId);

    /**
     * 添加用户信息
     * @param userInfo
     * @return
     */
    String saveUserInfo(UserInfo userInfo);

    /**
     * 修改用户信息
     * @param userInfo
     * @return
     */
    String modifyUserInfo(UserInfo userInfo);

    /**
     * 拉黑用户（修改用户的状态值）
     * @param userId
     * @return true-成功 false-失败
     */
    String modifyUserStatus(int userId,String userState);

    /**
     * 通过Id删除用户信息
     * @param userIds
     * @return
     */
    String deleteUserInfo(String userIds);

    /**
     * 获取全部的商品信息
     * @return 商品列表
     */
    List<ProductInfo> getProductList();

    /**
     * 通过page获取商品信息
     * @param page
     * @return
     */
    List<ProductInfo> selectProductListPage(Page page);

    /**
     * 查询商品信息分页的总数（含查询后的总数）
     * @param page
     * @return
     */
    Integer selectProductListPageCount(Page page);

    /**
     * 通过Id查询商品信息
     * @param productId
     * @return
     */
    ProductInfo getProductById(int productId);

    /**
     * 添加商品
     * @param productInfo
     * @return
     */
    int saveProduct(ProductInfo productInfo,MultipartFile productImage,String url);

    /**
     * 上架或下架商品（修改商品的状态值）
     * @param productId
     * @return
     */
    String modifyProductStatus(int productId,String productState);

    /**
     * 修改商品信息
     * @param productInfo
     * @return
     */
    int modifyProductInfo(ProductInfo productInfo,MultipartFile productImage,String url);

    /**
     * 删除商品信息
     * @param productIds
     * @return
     */
    String delProductInfo(String productIds);

    /**
     * 查询全部的订单信息
     * @return
     */
    List<Order> getOrderList();

    /**
     * 通过Page查询订单信息
     * @param page
     * @return
     */
    List<Order> selectOrderListPage(Page page);

    /**
     * 通过Page查询订单信息总数（含查询总数）
     * @param page
     * @return
     */
    Integer selectOrderPageCount(Page page);

    /**
     * 查询全部的订单-详细信息
     * @return
     */
    List<OrderDetail> getOrderDetailList();

    /**
     * 通过Page查询订单信息-详细信息
     * @param page
     * @return
     */
    List<OrderDetail> selectOrderDetailListPage(Page page);

    /**
     * 通过page查询订单详细信息总数（含查询总数）
     * @param page
     * @return
     */
    Integer selectOrderDetailPageCount(Page page);

    /**
     * 根据订单编号uuid进行查询订单-详细信息
     * @param orderDetailId
     * @return
     */
    OrderDetail getOrderDetailByOrderDetailId(int orderDetailId);

    /**
     * 导出订单信息
     * @return
     */
    List<Order> ListOrderInfo();

    /**
     * 修改订单信息(根据订单编号uuid修改)
     * @param orderDetail
     * @return
     */
    String modifyOrderDetailInfo(OrderDetail orderDetail);

    /**
     * 根据订单Id删除订单信息
     * @param orderIds
     * @param orderNos
     * @return
     */
    String deleteOrder(String orderIds,String orderNos);

    /**
     * 根据订单详细Id删除订单详细信息(暂且不用)
     * @param orderDetailId
     * @return
     */
    String deleteOrderDetail(int orderDetailId);

    /**
     * 查询订单信息
     * @param orderNo
     * @return
     */
    Order findOrderInfo(String orderNo);

    /**
     * 下订单
     * @param orderDetail
     * @return
     */
    String saveOrderInfo(OrderDetail orderDetail);

    /**
     * 通过id查询订单详细信息并将信息以excel文件方式导出到指定路径的目录下-单行
     * @param orderDetailId
     * @return
     */
    //String excelOrderInfo(String orderDetailId,String pathFile);
}
